// ?  中等--外观数列

/* 
        输入：n = 4
        输出："1211"
        解释：
        countAndSay(1) = "1"
        countAndSay(2) = 读 "1" = 一 个 1 = "11"
        countAndSay(3) = 读 "11" = 二 个 1 = "21"
        countAndSay(4) = 读 "21" = 一 个 2 + 一 个 1 = "12" + "11" = "1211"

*/

var countAndSay = function(n){
    
    str = '1'
    // 从第二项开描述
    for(let i = 2; i <= n ;i++){
            let sb = []
            let start = 0
            let pos = 0
            while(pos < str.length){
                //当前位置与上一个元素相同，则pos右移
                while(str[pos]===str[start]){
                    pos++
                }
                sb.push(''+(pos-start)+str[start]) // 重复个数 + 重复的数字
                start = pos  //更新开始位置
            }
            str = sb.join('')  //形成答案给下一次for循环
    }
    return str
    
}
 